const _this = this
import E from 'wangeditor'
const { $, BtnMenu, DropListMenu, PanelMenu, DropList, Panel, Tooltip } = E
// 自定义 格式刷 菜单继F承 BtnMenu class
class FormatPainter extends BtnMenu {
    constructor(editor) {
        // data-title属性表示当鼠标悬停在该按钮上时提示该按钮的功能简述
        const $elem = E.$(
            `<div class="w-e-menu" data-title="格式刷">
        <i class="el-icon-s-open"></i>
      </div>`
        )
        super($elem, editor)
    }
    // 菜单点击事件，获取点击格式刷后的下一次点击文本
    clickHandler() {
        let nodeArray = []
        //获取当前选中元素所有父样式
        function getAllStyle(dom) {
            if (!dom) return
            const tagName = dom.tagName?.toLowerCase()
            if (tagName === 'p') {
                nodeArray.push({
                    tagName: 'span',
                    attributes: Array.from(dom.attributes).map((i) => {
                        return {
                            name: i.name,
                            value: i.value,
                        }
                    }),
                })
                return nodeArray
            } else {
                nodeArray.push({
                    tagName: tagName,
                    attributes: Array.from(dom.attributes).map((i) => {
                        return {
                            name: i.name,
                            value: i.value,
                        }
                    }),
                })
                getAllStyle(dom.parentNode)
            }
            return nodeArray
        }
        //获取鼠标位置的节点
        let containerEle = this.editor.selection.getSelectionStartElem()
            .elems[0]
        let brushStyle = getAllStyle(containerEle)
        if (!!brushStyle) {
            //有复制到的格式就开启格式刷
            _this.ifBrushed = !_this.ifBrushed //格式刷开启
            _this.brushStyle = brushStyle //格式刷样式存储
        }
    }
    // 菜单是否被激活（如果不需要，这个函数可以空着）
    tryChangeActive() {}
}

E.registerMenu('FormatPainter', FormatPainter)

//监听鼠标抬起事件
this.$refs['editor'].addEventListener('mouseup', () => {
    //延时调用确保富文本编辑器中的选中文本已经该改变
    setTimeout(() => {
        this.containerEleChange()
    })
})

